package com.zsy._22八锁现象;

import java.util.concurrent.TimeUnit;

/**
 * 1、1个静态的同步方法，1个普通的同步方法 ，一个对象，先打印 发短信？打电话？
 * 2、1个静态的同步方法，1个普通的同步方法 ，两个对象，先打印 发短信？打电话？
 * <p>
 * 静态方法和同步方法属于两把锁
 * 两个对象的静态方法和同步方法属于两把锁
 */
@SuppressWarnings("ALL")
public class Test4 {
    public static void main(String[] args) {
        // 两个对象的Class类模板只有一个，static，锁的是Class
        Phone phone1 = new Phone();
        Phone phone2 = new Phone();
        //锁的存在
        new Thread(() -> phone1.sendSms(), "A").start();
        // 捕获
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        new Thread(() -> phone2.call(), "B").start();
    }

    static class Phone {
        // 静态的同步方法 锁的是 Class 类模板
        public static synchronized void sendSms() {
            try {
                TimeUnit.SECONDS.sleep(4);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("发短信");
        }

        // 普通的同步方法 锁的调用者
        public synchronized void call() {
            System.out.println("打电话");
        }
    }

}

